home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 4 / QRZ Ham Radio Callsign Database - Volume 4.iso / files / dsp / drbubtxt / toolstar.z / toolstar / tools / sloader.asm < prev    next >
Assembly Source File  |  1992-04-28  |  4KB  |  144 lines

  1. ;
  2. ; This program, originally available on the Motorola DSP bulletin board,
  3. ; is provided under a DISCLAIMER OF WARRANTY available from Motorola DSP
  4. ; Operation, 6501 William Cannon Drive, West, Austin, Texas  78735-8598.
  5. ;
  6. ;    Serial Loader for the DSP56000.
  7. ;    This loader initializes the serial communications interface (SCI)
  8. ;    on the DSP56001 for 9600 baud and then loads OMF records (output
  9. ;    by the DSP56000 assembler) into internal memory.  The loader takes
  10. ;    the upper 128 bytes of P memory allowing the lower memory from
  11. ;    $0000-017F to be used by the user.  The following records are
  12. ;    interpreted:
  13. ;        _DATA X ADDR
  14. ;        _DATA Y ADDR
  15. ;        _DATA P ADDR
  16. ;        _END ADDR
  17. ;    After the END record is encountered, the loader jumps to the address
  18. ;    in the END record.  Note that an address MUST be present in the
  19. ;    END record (the program must contain at least one P segment).
  20. ;
  21. ;    To generate a EPROM of this loader (8Kx8), perform the following:
  22. ;    $ asm56000 -b -l -a sloader
  23. ;    $ srec sloader
  24. ;
  25. ;    The EPROM is in file SLOADER.P.  To program the EPROM, set the
  26. ;    programmer to MOTOROLA S record format, download the file with
  27. ;    a zero address offset and program the part.
  28. ;
  29. ;    The loader loads the following memory spaces:
  30. ;        X - 0 to FF
  31. ;        Y - 0 to FF
  32. ;        P - 0 to 17F
  33. ;
  34.     PAGE    132,60,1,1
  35.  
  36. SCR    EQU    $FFF0        ;SCI CONTROL REGISTER
  37. SCCR    EQU    $FFF2        ;SCI CLOCK CONTROL REGISTER
  38. PCC    EQU    $FFE1        ;PORT C CONTROL REGISTER
  39. RDRF    EQU    $2        ;RECEIVE DATA REGISTER FULL FLAG
  40. SSR    EQU    $FFF1        ;SCI STATUS REGISTER
  41. SRXH    EQU    $FFF6        ;SCI RECEIVE IN HIGH BYTE
  42. LDRMEM    EQU    $180        ;START OF LOADER IN P MEMORY
  43.  
  44.     ORG    P:$0000        ;RESET VECTOR FOR BOOTING
  45. RVEC
  46.     JMP    LOAD        ;GO EXECUTE LOADER
  47.  
  48.     ORG    P:LDRMEM,P:3*LDRMEM
  49. LOAD
  50.     MOVEP    #$0302,X:SCR    ;ENABLE TX,RX: 8 BIT 1 START, 1 STOP
  51.     MOVEP    #$002A,X:SCCR    ;CD=42 (/43), INT CLK @ 9600 BAUD (27MHz)
  52.     MOVEP    #$0007,X:PCC    ;ENABLE SCI
  53. WTUS
  54.     JSR    GETCH        ;INPUT CHARACTER
  55.     MOVE    #'_',X0        ;GET UNDERSCORE CHARACTER
  56.     CMP    X0,A        ;SEE IF "_" YET
  57.     JNE    WTUS        ;NO
  58. GOTUS
  59.     JSR    GETCH        ;GET A CHARACTER
  60.     MOVE    #'D',X0        ;GET A D FOR DATA
  61.     CMP    X0,A    #'E',X0    ;COMPARE TO D, GET E
  62.     JEQ    DATAREC        ;IF "D", THEN DATA RECORD
  63.     CMP    X0,A        ;SEE IF END RECORD
  64.     JNE    WTUS        ;NO, GO WAIT FOR ANOTHER UNDERSCORE
  65. _WTSPC
  66.     JSR    GETCH        ;GET CHARACTER
  67.     MOVE    #$20,X0        ;GET SPACE
  68.     CMP    X0,A        ;WAIT FOR SPACE AFTER "END"
  69.     JNE    _WTSPC        ;WAIT FOR SPACE
  70.     JSR    IN4        ;GET TRANSFER ADDRESS
  71.     MOVE    B1,R0        ;MOVE TRANSFER ADDRESS
  72.     NOP            ;CLEAR ADDRESS PIPE
  73.     JMP    (R0)        ;GO EXECUTE USER CODE
  74. DATAREC
  75.     JSR    GETCH        ;GET CHARACTER
  76.     MOVE    #$20,X0        ;GET SPACE
  77.     CMP    X0,A        ;SEE IF SPACE
  78.     JNE    DATAREC        ;NO
  79.     JSR    GETCH        ;GET [P,X,Y]
  80.     MOVE    A1,Y0        ;SAVE CHARACTER
  81.     JSR    IN4        ;GET ADDRESS OF DATA RECORD
  82.     MOVE    B1,R0        ;SAVE ADDRESS
  83.     MOVE        #'X',A    ;GET X
  84.     CMP    Y0,A    #'Y',A    ;SEE IF X, GET Y
  85.     JEQ    _LDX        ;LOAD DATA INTO X MEMORY
  86.     CMP    Y0,A        ;SEE IF Y
  87.     JEQ    _LDY        ;LOAD DATA INTO Y MEMORY
  88. _LDP
  89.     JSR    IN6        ;GET DATA
  90.     MOVE    B1,P:(R0)+    ;LOAD P MEMORY
  91.     JMP    _LDP
  92. _LDX
  93.     JSR    IN6        ;GET DATA
  94.     MOVE    B1,X:(R0)+    ;LOAD X MEMORY
  95.     JMP    _LDX
  96. _LDY
  97.     JSR    IN6        ;GET DATA
  98.     MOVE    B1,Y:(R0)+    ;LOAD Y MEMORY
  99.     JMP    _LDY
  100.  
  101. GETCH
  102.     JCLR    #RDRF,X:SSR,*    ;WAIT FOR DATA IN SCI
  103.     MOVEP    X:SRXH,A    ;GET SCI DATA IN HIGH BYTE
  104.     LSL    A        ;SHIFT OUT PARITY
  105.     LSR    A        ;PUT 0 IN PARITY BIT
  106.     MOVE    A1,A        ;SIGN EXTEND AND ZERO
  107.     RTS
  108.  
  109. IN4
  110.     CLR    B    #>4,X0    ;CLEAR VALUE, GET 4
  111.     JMP    READHEX        ;READ 4 HEX CHARACTERS
  112. IN6
  113.     CLR    B    #>6,X0    ;CLEAR VALUE, GET 6
  114. READHEX
  115.     DO    X0,_READHEX    ;READ ASCII HEX AND CONVERT TO BINARY
  116. _GET
  117.     JSR    GETCH        ;GET A CHARACTER
  118.     MOVE    #'_',X0        ;GET UNDERSCORE
  119.     CMP    X0,A    #'F',X0    ;SEE IF UNDERSCORE
  120.     JNE    _NOTUS        ;NO
  121.     ENDDO            ;EXIT LOOP
  122.     MOVE    SSH,X0        ;POP RETURN ADDRESS
  123.     JMP    GOTUS        ;GO PROCESS NEW INPUT RECORD
  124. _NOTUS
  125.     CMP    X0,A    #'0',X0    ;SEE IF GREATER THAN F
  126.     JGT    _GET        ;YES, IGNORE
  127.     CMP    X0,A        ;SEE IF LESS THAN 0
  128.     JLT    _GET        ;YES, IGNORE
  129.     SUB    X0,A    #10,X0    ;ADJUST FOR ASCII TO BINARY
  130.     CMP    X0,A    #7,X0    ;SEE IF A-F
  131.     JLT    _NOTALPHA    ;NO
  132.     SUB    X0,A        ;ADJUST FOR 1-F
  133. _NOTALPHA
  134.     REP    #4        ;SHIFT OLD VALUE LEFT 1 NIBBLE
  135.     LSL    B
  136.     REP    #16        ;SHIFT NEW NIBBLE DOWN TO LSB
  137.     LSR    A
  138.     ADD    A,B        ;ADD NEW NIBBLE IN
  139. _READHEX
  140.     RTS
  141.  
  142.     END
  143.  
  144.